package lib;

import java.util.ArrayList;

public class EnsembleTableau extends Ensemble{

	private int size;
	private Element[] tab;
	
	public EnsembleTableau ()
	{
		super();
		super.setType("tableau");
		this.size=0;
		this.tab= new Element[size];
	}


	@Override
	public void afficheEnsemble() {
		for(Element e : this.tab)
		{
			System.out.println(e.getValeur());
		}
	}


	@Override
	public ArrayList<Element> getElements() {
		ArrayList<Element> retour  = new ArrayList<Element>();
		for(Element e : this.tab)
		{
			retour.add(e);
		}
		
		return retour;
	}

	@Override
	public void retraitElement(Element el) {
		int j=0;
		
		for(int i = 0; i<=this.tab.length;++i)//(Element e1 : this.tab)
		{
			if(this.tab[i].getValeur()==el.getValeur())
			{
				j=1;
				break;
			}
		}
		
		int taille = this.tab.length-j;
		Element[] tmp= new Element[taille];
		
		for(int i = 0; i<this.tab.length;++i)//(Element e1 : this.tab)
		{
			if(!(this.tab[i].getValeur()==el.getValeur()))
			{
				tmp[i]=el;
			}
		}
		this.tab = tmp;
		this.setCardinal(this.getCardinal()-1);
	}

	@Override
	public void ajoutElement(Element el) {
		Element[] tmp= new Element[this.tab.length+1];
		
		for(int i = 0; i<this.tab.length;++i)//(Element e1 : this.tab)
		{
				tmp[i]=this.tab[i];
		}
				
		tmp[tmp.length-1]=el;
		this.tab = tmp.clone();
		this.setCardinal(this.getCardinal()+1);
	}

	@Override
	public boolean testElement(Element el) {
		
		return this.tab.equals(el);
	}

	@Override
	public int getCardinal() {
		
		return super.getCardinal();
	}

	@SuppressWarnings("unused")
	@Override
	public Ensemble intersection(Ensemble ensemble) {
		
		EnsembleTableau tmpEnsemble = new EnsembleTableau();
		
		for(Element e1 : this.tab)
		{
			{
				for(Element e2 : (ArrayList <Element>)ensemble.getElements())
				{
					if(e1.getValeur()==e2.getValeur())
					{
						tmpEnsemble.ajoutElement(e1);
					}
				}
			}
		}
		if(tmpEnsemble==null)
		{
			tmpEnsemble = (EnsembleTableau) Ensemble.VIDE;
		}
		
		return tmpEnsemble;
	}
	

	@Override
	public Ensemble complementaire(Ensemble ensemble)  {
		EnsembleTableau tmpEnsemble=null;
		
		try {
			tmpEnsemble = (EnsembleTableau) this.clone();
			
			for(Element e1 : this.tab)
			{
				{
					for(Element e2 : (ArrayList <Element>)ensemble.getElements())
					{
						if(e1.getValeur()==e2.getValeur())
						{
							tmpEnsemble.retraitElement(e1);
						}
					}
				}
			}
			if(tmpEnsemble==null)
			{
				tmpEnsemble = (EnsembleTableau) Ensemble.VIDE;
			}
			
		} catch (CloneNotSupportedException e1) {
			e1.printStackTrace();
		}
		
		
		return tmpEnsemble;
	}
}
